In [ ]:

logo-ConoscereLinux_400x117.jpg

Python from zero to hero

Lezione 0

Docente: Luca Zomparelli

Cenni storici

Ideatore di Python Guido Van Rossum (Olanda 1956)

  • Guido Van Rossum crea all'inizio degli anni 90 Python
  • Guido ha lavorato alla Google fino al 2012 poi alla Dropbox e nel 2020 nella Developer Division alla Microsoft
  • Obbiettivi di Python: semplice, Open Source, linguaggio naturale, tempi di sviluppo brevi
  • Dittattore benevolo della comunità, quest'anno ha lasciato la guida

Il nome

Python deriva dalla passione di Guido per i Monti Python

Perchè imparare Python?

question_mark.gif

  • E' Open Source
  • Multi piattaforma
  • Sintassi semplice
  • Linguaggio di alto livello
  • È indirizzato agli oggetti
  • Estensibile / incorporabile
  • Comunità vastissima
  • Numerosissime librerie
  • Varietà di utilizzi
  • Elevate prestazioni
  • È usato da aziende importanti

Chi usa Python

Alcuni degli uilizzatori principali

blender.png nasa.jpeg walt_disney.gif
google.jpg cia.jpg dropbox.jpg
... e molte altre.

Versioni di Python

Versione 2.7 o 3.x

Quale scegliere? dubbio.gif Noi useremo la 3.10

Quali librerie ci sono per Python

Alcune fra le principli librerie

django.png matplotlib.png numpy.png
Qt.png sphinx.jpeg sqlalchemy.jpg
--- --- ---
pygame.png pillow-logo.png flask.png

Il linguaggio

omer.gif

Filosofia di Python

  • Programmazione indirizzata agli oggetti
  • Ambiente aperto (si può accedere a tutto)
  • Sintassi semplice e ordinata
  • Ricco di convenzioni e con poche restrizioni (spoiler)
  • Batterie incluse (https://docs.python.org/3/library/index.html)
  • Moduli per tutto super ottimizzati

Python interattivo

Molto comodo per la sperimentazione

  • IDLE

  • Riga di comando

  • Jupyter

    Per questa presentazione ho utilizzato Jupyter, ma voi userete IDLE, per semplicità.

Partiamo da un classico

print()

Questa funzione è la differenza più evidente fra la versione 2.7 e le 3.x.

Alcuni esempi

In [1]:
Test di output!
In [2]:
Testiamo un output multiplo con i numeri 3  e  2.7
In [3]:
Prima riga e ancora la prima.

Variabili

In Python, non serve dichiarare le variabili. Ogni volta che si assegna un valore ad una "etichetta" viene automaticamente creata una variabile del tipo adeguato:

In [4]:
int 3
float 7.5
str Ciao Mondo!!

Riutilizzo delle variabili

Se ad un'etichetta viene riassegnato un nuovo valore, il tipo può cambiare (sconsigliato)

In [5]:
str Questo non è un numero
int 42

In Python TUTTO è un oggetto

Vediamo alcuni esempi

In [6]:
4
16
In [7]:
4
['facciamo', 'una', 'prova.']
FACCIAMO UNA PROVA.
Facciamo Una Prova.

Aggiungiamo un po' di interattività

Chiedere input all'utente

In [8]:
Come ti chiami? Luca
Ciao Luca, Python è cool!

Formattazione stringhe

Esistono alcune modalità per la formattazione delle stringhe

In [9]:
Numero di prova1, 1
Numero di prova2, 2
Numero di prova3, 3
Numero di prova4, 4

Due note sulle virgolette per le stringhe

Si possono utilizzare diversi tipi di virgolette:

  • 'primo'
  • "secondo"
  • '''terzo'''
  • """quarto"""
In [11]:
Primo testo con l'apostrofo


Secondo testo con l'apostrofo

Terzo test
con degli invii a capo.

Quarto test
con degli invii a capo.

prefissi letterali

Sono alcune lettere da anteporre alle costanti stringa, per specificarne alcuni comportamenti o rappresentazioni. Vediamo alcuni esempi ...

binary

In [12]:
b'Prova di stringa binaria\n'
In [13]:
Prova di stringa binaria

In [14]:
b'\xff\xfeP\x00r\x00o\x00v\x00a\x00 \x00d\x00i\x00 \x00s\x00t\x00r\x00i\x00n\x00g\x00a\x00 \x00b\x00i\x00n\x00a\x00r\x00i\x00a\x00\n\x00'

raw

In [28]:
Questa è una stringa 
 ed è normale!
In [31]:
Questa è una stringa \n ed è raw!

Un pessimo esempio di stringa raw

In [32]:
C:\Users\Luca

... e la portabilità?!

formatted

( ... ancora sulla formattazione dalla versione 3.6)

In [15]:
Numero di prova5, 5

slice

Lo slice in Python consente di prendere porzioni di oggetti "lista", in maniera semplice e molto leggibile

In [16]:
Q
In [17]:
.
In [18]:
sta è una frase da tagli
In [19]:
sta è una
In [20]:
e da ta

Tuple

Oggetti immutabili (lo sono anche le stringhe)

In [21]:
(1, 2, 'terzo')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In [21], line 3
      1 var_tupla = (1, 2, "terzo")
      2 print(var_tupla)
----> 3 var_tupla[1] = 77

TypeError: 'tuple' object does not support item assignment

In [22]:
(1, 77, 'terzo')

Liste

In [23]:
['a', 'b', 3]
['a', 'secondo', 3]
['a', 'secondo', 3, 'aggiunto']

Dizionari

In [25]:
{'Luca': 7, 'Max': 8, 'Maria': 7}
Il voto di Luca è 7.
{'Luca': 7, 'Max': 8, 'Maria': 7, 'Silvia': 8.5}

Set

In [26]:
{'Maria', 'Luca', 'Luigi'}
{'Silvia', 'Andrea', 'Luigi'}
{'Luigi', 'Maria', 'Silvia', 'Luca', 'Andrea'}
{'Maria', 'Luca'}
{'Luigi'}

Controllo di flusso

Python, ovviamente, fornisce diversi dichiarazioni per controllare il flusso dei programmi, come molti altri linguaggi, anche se con alcuni "colpi di scena".

(ricordatevi di non incrociare mai i flussi!)

if

In [29]:
Inserisci un numero: 10
Hai inserito 10.

Due note sulle valutazioni

In [30]:
True è True
False è False
'prova' è True
'' è False
[] è False
[1, 2, 3] è True

for

In [31]:
0
1
2
3
4

break

In [32]:
Margherita
Tulipano
Orchidea
Trovato!

continue

In [35]:
0: numero pari
1: numero dispari
2: numero pari
3: numero dispari
4: numero pari
5: numero dispari
6: numero pari
7: numero dispari
8: numero pari
9: numero dispari

else

In [ ]:

pass

In [ ]:

while

In [38]:
i = 1, variabile_test = True
i = 2, variabile_test = True
i = 3, variabile_test = True
i = 4, variabile_test = True
i = 4, variabile_test = False
Ciclo terminato

match (structural pattern matching)

dalla versioe 3.10

In [5]:
Not found
In [1]:
Bad request

assegnazione "tricheco" (walrus)

dalla versioe 3.10

In [2]:
Valore di 10.

Funzioni

In [4]:
(3, 5)
(40, 5)

I parametri alle funzioni sono passati sempre per riferimento ...

... anche se non sembra!

Esempio 1

In [5]:
1 2
2 1
1 2

Esempio 2

In [6]:
[1] [2]
[2] [1]
[2] [1]

Classi

In [7]:
In [8]:
Rosso
Benzina
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [8], line 4
      2 print(macchina.colore)
      3 print(macchina.alimentazione)
----> 4 print(macchina.accesa)

AttributeError: 'automobile' object has no attribute 'accesa'

Membri statici

In [9]:
Rosso Rosso
Bianco Bianco
Verde Bianco

Una classe migliore

In [10]:
In [11]:
verde
GPL
False
True

Metodi e attributi privati

door.gif

Esempio di dichiarazione

In [12]:

Esempi d'uso

L'elemento __accesa è raggiungibile da fuori?

In [13]:
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [13], line 1
----> 1 print(macchina.__accesa)

AttributeError: 'automobile' object has no attribute '__accesa'

Proviamo un uso migliore

In [14]:
False
True
False

L'elemento __accesa è raggiungibile da fuori?

Ricco di convenzioni e con poche restrizioni

(spoiler)

In [15]:
False